package meeting;

import "common.pp";

option cpp_package = meeting;
option go_package = "gopkg/protocol/meeting";			// go package 名
option java_package = "com.backend.protocol.talk";	// java package 名
option csharp_package = "com.client.meeting";		// c# package名
option csharp_json = "unity";						// c# json支持的风格(none, unity)
option c_json = "native";							// c json支持的风格(none, native)

// 常量定义
const uint16 MAX_MEETING_ID_LEN = 128;			// 最大会议ID长度
const uint16 MAX_MEETING_NUMBER = 128;			// 会议列表中最大会议数量
const uint16 MAX_CHATTER_NUMBER = 8;			// 语音会议中最大聊天人数量
const string TEST_STRING = "12345";				// 测试用字符串常量

// 会议类型
enum MeetingType
{
	MEETING_TYPE_NORMAL = 0,								// 普通会员
	MEETING_TYPE_AUDIO = 1,									// 语音会议
	MEETING_TYPE_VIDEO = 2,									// 视频会议
}

// 会议状态
enum MeetingState
{
	MEETING_STATE_INIT = 0,									// 初始化
	MEETING_STATE_START = 1,								// 已开始
	MEETING_STATE_END = 2,									// 已结束
	MEETING_STATE_CANCEL = 3,								// 已取消
}

// 会议信息
message MeetingInfo
{
	string MeetingID = 1;			`json:"meeting_id,omitempty" pp:"default:xyz;size:MAX_MEETING_ID_LEN"`		// 会议ID
	MeetingType MeetingType = 2;	`json:"meeting_type" pp:"default:MEETING_TYPE_AUDIO"`						// 会议类型
	uint8 MeetingState = 3;			`json:"meeting_state" pp:"default:MEETING_STATE_INIT"`	// 会议状态
	int64 BeginTM = 4;				`json:"begin_tm" pp:"default:common.TEST_UINT16"`		// 会议开始时间
	repeated uint64	Chatters = 5;	`json:"chatters" pp:"size:MAX_CHATTER_NUMBER"`			// 语音会议中聊天者UID
	repeated string	Listeners = 6;	`json:"listeners" pp:"size:MAX_CHATTER_NUMBER"`			// 语音会议中听众
	double reduceRate = 7;
	float price = 8;
}

// 会议列表
message MeetingList
{
	repeated MeetingInfo MeetingInfos = 1;	`json:"meeting_infos" pp:"size:MAX_MEETING_NUMBER"`	// 列表中会议信息
	common.KeyValue UserKey = 2;
	repeated common.KeyValue MemberInfos = 3;
}

// 会议信息
oneof MeetingData
{
	MeetingList MeetingList = common.MEETING_DATA_TYPE_LIST;			`json:"meeting_list"`	// 会议列表
	MeetingInfo MeetingInfo = common.MEETING_DATA_TYPE_INFO;			`json:"meeting_info"`	// 会议信息
}
